function includes(arr, target) {
    for (var i = 0; i < arr.length; i++) {
        if (arr[i] === target) {
            return true
        }
    }
    return false
}

/**
 * 修改对象，仅保留需要的属性
 * @param {Object} obj 要修改的对象
 * @param {Array<string>} keys 需要保留的属性名数组
 */


/* 这样子写，并不会改变原对象
形参重新赋值，那么就和原来传递的参数断了联系
*/
function pickFalse(obj, keys) {
    var newObj = {}
    for (var key in obj) {
        if (includes(keys, key)) {
            //将属性加到新对象里面
            newObj[key] = obj[key]
        }
    }
    //只要形参重新赋值，那么就和原来传递的参数断了联系
    obj = newObj
}

/* 正确做法，直接修改形参 */
function pick(obj, keys) {
    for (var key in obj) {
        if (!includes(keys, key)) {  //如果没有，属性不存在
            //不保留
            delete obj[key]
        }
    }
}


var obj = {
    a: 1,
    b: 2,
    c: 3,
    d: 4
}

pick(obj, ['a', 'c'])

console.log("过滤后的对象", obj);
